贪婪算法简单总结

贪婪算法的简单总结:

贪婪算法就是每步都采取最优的做法,也就是说每步都选择局部最优解,最终得到的就是全局最优解

贪婪算法并非适用于任何情况,但它却易于实现

有时候可以使用贪婪算法作为近似算法

评价近似算法的优劣标准:

1. 速度有多快。

2. 得到的近似解与最优解的接近程度。

 

举例:

集合覆盖问题,假设你办了个广播节目,要让全美50个州的听众都能收听到。为此你需要决定在哪些广播台播出,在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。

 

贪婪算法作为近似算法,步骤如下:

1. 选出这样一个广播台,即它覆盖了最多的未覆盖州。即便这个广播台覆盖了一些已覆盖的州,也没有关系。

2. 重复第一步,直到覆盖了所有的州。

 

 

 

  1 states_needed = set(['mt','wa','or','id','nv','ut','ca','az'])

  2 final_stations = set()

  3 stations = {}

  4 stations['kone'] = set(['id','nv','ut'])

  5 stations['ktwo'] = set(['wa','id','mt'])

  6 stations['kthree'] = set(['or','nv','ca'])

  7 stations['kfour'] = set(['nv','ut'])

  8 stations['kfive'] = set(['ca','az'])

  9

 10 while states_needed:

 11     best_station = None

 12     states_covered = set()

 13     for station,states in stations.items():

 14         covered = states_needed & states

 15         if len(covered) > len(states_covered):

 16             best_station = station

 17             states_covered = covered

 18

 19     states_needed -= states_covered

 20     final_stations.add(best_station)

 21

 22 print(final_stations)



代码解释:

 

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值